﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using kk.components.contracts;
using kk.messages.contracts.DataModel;
using kk.messages.contracts.ViewModel;

namespace kk.reservierungsrahmen.form
{
    public partial class FrmCouchPotato : Form, IReservierungsrahmen
    {
        private IEnumerable<Platzposition> aktuelleReservierungswünsche;


        public FrmCouchPotato(Control ctlBelegungsplanAnsicht)
        {
            InitializeComponent();

            ctlBelegungsplanAnsicht.Location = dummyBelegungsplanAnsicht.Location;
            ctlBelegungsplanAnsicht.Size = dummyBelegungsplanAnsicht.Size;
            ctlBelegungsplanAnsicht.Anchor = dummyBelegungsplanAnsicht.Anchor;
            this.Controls.Add(ctlBelegungsplanAnsicht);
            this.dummyBelegungsplanAnsicht.Visible = false;
        }


        public void ProcessGeändertePlatzwahl(IEnumerable<Platzposition> gewähltePlätze)
        {
            this.aktuelleReservierungswünsche = gewähltePlätze;
            this.toolReserviertePlätze.Text = gewähltePlätze.Count() + " ausgewählt";
        }


        public void Configure()
        {
            this.OnBelegungsplanZuVorstellung(new Request<Vorstellung, Belegungsplan>(
                                                        new Vorstellung("", DateTime.Now, "saalX"), 
                                                        belegungsplan => this.OnBelegungsplan(belegungsplan)));
        }


        public event Action<Request<Vorstellung, Belegungsplan>> OnBelegungsplanZuVorstellung;
        public event Action<Belegungsplan> OnBelegungsplan;
        public event Action<Request<Reservierungsanfrage, Reservierungsbestätigung>> OnReservierungsanfrage;


        private void btnReservieren_Click(object sender, EventArgs e)
        {
            var reservierungsanfrage = new Reservierungsanfrage(txtName.Text, txtEmail.Text,
                                                                new Vorstellung("xyz", new DateTime(2010, 3, 17, 12, 0, 0), "audimax"),
                                                                this.aktuelleReservierungswünsche.ToArray());
            this.OnReservierungsanfrage
                .Request<Reservierungsanfrage, Reservierungsbestätigung>(reservierungsanfrage)
                .Receive(reservierungsbestätigung =>
                             {
                                 if (reservierungsbestätigung.ReservierungErfolgreich)
                                     MessageBox.Show(
                                         "Reservierung erfolgreich! Ihre Reservierungsnummer: " +
                                         reservierungsbestätigung.Reservierungsnummer, "Online Kinokartenreservierung",
                                         MessageBoxButtons.OK, MessageBoxIcon.Information);
                                 else
                                     MessageBox.Show("Reservierung nicht möglich!", "Online Kinokartenreservierung",
                                                     MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                             });
        }
    }
}
